// #include <iostream>
// #include <memory>
// #include <time.h>
// #include "ThreadPool.hpp"
// #include "Task.hpp"

// using namespace std;

// int main()
// {
//     ThreadPool<Task>::GetInstance()->Start();

//     srand((uint64_t)time(nullptr) ^ getpid());

//     while (1)
//     {
//         int data1 = rand() % 100;
//         usleep(10000);
//         int data2 = rand() % 100;
//         usleep(10000);

//         char op = ops[rand() % ops.size()];
//         Task t(data1, data2, op);
//         ThreadPool<Task>::GetInstance()->Push(t);
//         sleep(1);
//     }

//     ThreadPool<Task>::GetInstance()->Join();

//     return 0;
// }

#include <iostream>
#include <memory>
#include <time.h>
#include "ThreadPool.hpp"
#include "Task.hpp"

using namespace std;

int main()
{
    unique_ptr<ThreadPool<Task>> tp(new ThreadPool<Task>());
    tp->Start();

    srand((uint64_t)time(nullptr) ^ getpid());

    while (1)
    {
        int data1 = rand() % 100;
        usleep(10000);
        int data2 = rand() % 100;
        usleep(10000);

        char op = ops[rand() % ops.size()];
        Task t(data1, data2, op);
        tp->Push(t);
        sleep(1);
    }

    tp->Join();

    return 0;
}